﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Collections;

namespace LI4.Data
{
    class Candidato
    {
        private Ligacao ligacao;

        public Candidato()
        {
            ligacao = new Ligacao();
        }

        public int inserirCandidato(Business.Candidato cand)
        {
            string descricao = "Candidato " + cand.Login.Username + " registou-se no sistema";
            SqlParameter[] paramts = new SqlParameter[15];
            string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            paramts[0] = new SqlParameter();
            paramts[0].ParameterName = "@return_value";
            paramts[0].SqlDbType = System.Data.SqlDbType.Int;
            paramts[0].Direction = System.Data.ParameterDirection.ReturnValue;

            paramts[1] = new SqlParameter("@username", cand.Login.Username);
            paramts[2] = new SqlParameter("@nome", cand.Nome);
            paramts[3] = new SqlParameter("@rua", cand.Rua);
            paramts[4] = new SqlParameter("@cod_postal", cand.CodPostal);
            paramts[5] = new SqlParameter("@telefone", cand.Telefone);
            paramts[6] = new SqlParameter("@mail", cand.Mail);
            paramts[7] = new SqlParameter("@curriculum", cand.Curriculum);
            paramts[8] = new SqlParameter("@situacao", cand.Situacao);
            paramts[9] = new SqlParameter("@cod_localidade", cand.Localidade.CodLocalidade);
            paramts[10] = new SqlParameter("@password", cand.Login.Password);
            paramts[11] = new SqlParameter("@tipo",cand.Login.Tipo);
            paramts[12] = new SqlParameter("@registoD", descricao);
            paramts[13] = new SqlParameter("@data", data);
            paramts[14] = new SqlParameter("@userOp", cand.Login.Username);

            
            try
            {
               ligacao.runProcedure("dbo.inserirCandidato", paramts);
            }
            catch { }
            
            return (int)ligacao.mySqlCommand.Parameters["@return_value"].Value;
           
        }

       
        public int update(Business.Candidato cand)
        {
            string descricao = "Editou candidato: " + cand.Login.Username + ".";
            SqlParameter[] paramts = new SqlParameter[15];
            string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            paramts[0] = new SqlParameter();
            paramts[0].ParameterName = "@return_value";
            paramts[0].SqlDbType = System.Data.SqlDbType.Int;
            paramts[0].Direction = System.Data.ParameterDirection.ReturnValue;

            paramts[1] = new SqlParameter("@username", cand.Login.Username);
            paramts[2] = new SqlParameter("@nome", cand.Nome);
            paramts[3] = new SqlParameter("@rua", cand.Rua);
            paramts[4] = new SqlParameter("@cod_postal", cand.CodPostal);
            paramts[5] = new SqlParameter("@telefone", cand.Telefone);
            paramts[6] = new SqlParameter("@mail", cand.Mail);
            paramts[7] = new SqlParameter("@curriculum", cand.Curriculum);
            paramts[8] = new SqlParameter("@situacao", cand.Situacao);
            paramts[9] = new SqlParameter("@cod_localidade", cand.Localidade.CodLocalidade);
            paramts[10] = new SqlParameter("@password", cand.Login.Password);
            paramts[11] = new SqlParameter("@tipo", cand.Login.Tipo);
            paramts[12] = new SqlParameter("@registoD", descricao);
            paramts[13] = new SqlParameter("@data", data);
            paramts[14] = new SqlParameter("@userOp", Program.Login.Username);

            try
            {
                ligacao.runProcedure("dbo.updateCandidato", paramts);
            }
            catch { }

            return (int)ligacao.mySqlCommand.Parameters["@return_value"].Value;
        }

        public int remover(Business.Candidato cand)
        {
          
            string descricao = "Inactivou conta do candidato: " + cand.Login.Username + ".";
            SqlParameter[] paramts = new SqlParameter[7];
            string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            paramts[0] = new SqlParameter();
            paramts[0].ParameterName = "@return_value";
            paramts[0].SqlDbType = System.Data.SqlDbType.Int;
            paramts[0].Direction = System.Data.ParameterDirection.ReturnValue;

            paramts[1] = new SqlParameter("@username", cand.Login.Username);
            paramts[2] = new SqlParameter("@situacao", cand.Situacao);
            paramts[3] = new SqlParameter("@tipo", cand.Login.Tipo);
            paramts[4] = new SqlParameter("@registoD", descricao);
            paramts[5] = new SqlParameter("@data", data);
            paramts[6] = new SqlParameter("@userOp", Program.Login.Username);

            try
            {
                ligacao.runProcedure("dbo.removerCandidato", paramts);
            }
            catch { }

            return (int)ligacao.mySqlCommand.Parameters["@return_value"].Value;

        }

        public Business.Candidato getCandidato(string username)
        {
            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade() ;

            Business.Candidato cand = new LI4.Business.Candidato();
            Business.Login login = new LI4.Business.Login(log.getLogin(username));
            Business.Localidade local;


            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Candidatos where username='" + username + "';");

            reader = ligacao.mySqlDataReader;
            if (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string curriculum = reader.GetString(6);
                int situacao = reader.GetInt32(7);
                int cod_local = reader.GetInt32(8);
                
                reader.Close();

                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));

                cand = new LI4.Business.Candidato(nome,rua,cod_postal,mail,curriculum,situacao,telefone,local,login);
                
            }
            
            reader.Close();

            return cand;
        }

        public bool exiteCandidato(string username)
        {
            SqlDataReader reader;

            ligacao.Select("SELECT username FROM Candidatos where username='" + username + "';");
            reader = ligacao.mySqlDataReader;
            bool existe = reader.Read();
            reader.Close();

            return existe;
        }

        public int inserirCandidatoCurso(string username, int cod_curso)
        {
           
            string descricao = "Inseriu candidato "+username+" no curso: " + cod_curso + ".";
            SqlParameter[] paramts = new SqlParameter[6];
            string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            paramts[0] = new SqlParameter();
            paramts[0].ParameterName = "@return_value";
            paramts[0].SqlDbType = System.Data.SqlDbType.Int;
            paramts[0].Direction = System.Data.ParameterDirection.ReturnValue;

            paramts[1] = new SqlParameter("@username", username);
            paramts[2] = new SqlParameter("@cod_curso", cod_curso);
            paramts[3] = new SqlParameter("@registoD", descricao);
            paramts[4] = new SqlParameter("@data", data);
            paramts[5] = new SqlParameter("@userOp", Program.Login.Username);

            try
            {
                ligacao.runProcedure1("dbo.inserirCandidatoCurso", paramts);
            }
            catch { }

            return (int)ligacao.mySqlCommand.Parameters[0].Value;
        }

        public ArrayList getCandidatos()
        {

            ArrayList array = new ArrayList();

            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();


            Business.Candidato cand = new LI4.Business.Candidato();

            Business.Login login;
            Business.Localidade local;

            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Candidatos");

            reader = ligacao.mySqlDataReader;

            while (reader.Read())
            {

                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string curriculum = reader.GetString(6);
                int situacao = reader.GetInt32(7);
                int cod_local = reader.GetInt32(8);

                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));
                login = new LI4.Business.Login(log.getLogin(user));
                
                cand = new LI4.Business.Candidato(nome, rua, cod_postal, mail, curriculum, situacao, telefone, local, login);

                array.Add(cand);
            }

            reader.Close();
            
            return array;

        }
       
        

        public Business.Candidato getCandidatoNome(string nomec)
        {
            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();

            Business.Candidato cand = new LI4.Business.Candidato();
            Business.Login login;
            Business.Localidade local;


            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Candidatos where nome='" + nomec + "';");

            reader = ligacao.mySqlDataReader;
            if (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string curriculum = reader.GetString(6);
                int situacao = reader.GetInt32(7);
                int cod_local = reader.GetInt32(8);

                reader.Close();

                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));
                login = new Business.Login(log.getLogin(user));
                cand = new LI4.Business.Candidato(nome, rua, cod_postal, mail, curriculum, situacao, telefone, local, login);

            }

            reader.Close();

            return cand;
        }

        public ArrayList getCandidatosNome(string nomec)
        {
            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();

            Business.Candidato cand = new LI4.Business.Candidato();
            Business.Login login;
            Business.Localidade local;
            ArrayList array = new ArrayList();

            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Candidatos where nome like'%" + nomec + "%';");

            reader = ligacao.mySqlDataReader;
            while (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string curriculum = reader.GetString(6);
                int situacao = reader.GetInt32(7);
                int cod_local = reader.GetInt32(8);

                

                login = log.getLogin(user);

                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));

                cand = new LI4.Business.Candidato(nome, rua, cod_postal, mail, curriculum, situacao, telefone, local, login);

                array.Add(cand);
            }

            reader.Close();

            return array;
        }

        public ArrayList getCandidatosUser(string usern)
        {
            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();

            Business.Candidato cand = new LI4.Business.Candidato();
            Business.Login login;
            Business.Localidade local;
            ArrayList array = new ArrayList();

            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Candidatos where username='" + usern + "';");

            reader = ligacao.mySqlDataReader;
            while (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string curriculum = reader.GetString(6);
                int situacao = reader.GetInt32(7);
                int cod_local = reader.GetInt32(8);



                login = log.getLogin(user);

                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));

                cand = new LI4.Business.Candidato(nome, rua, cod_postal, mail, curriculum, situacao, telefone, local, login);

                array.Add(cand);
            }

            reader.Close();

            return array;
        }

        public ArrayList getCandidatosLocalidade(int localidadec)
        {
            Data.Login log = new Data.Login();
            Data.Localidade localData = new Localidade();

            Business.Candidato cand = new LI4.Business.Candidato();
            Business.Login login;
            Business.Localidade local;
            ArrayList array = new ArrayList();

            SqlDataReader reader;

            ligacao.Select("SELECT * FROM Candidatos where cod_localidade ='" + localidadec + "';");

            reader = ligacao.mySqlDataReader;
            while (reader.Read())
            {
                string user = reader.GetString(0);
                string nome = reader.GetString(1);
                string rua = reader.GetString(2);
                string cod_postal = reader.GetString(3);
                int telefone = reader.GetInt32(4);
                string mail = reader.GetString(5);
                string curriculum = reader.GetString(6);
                int situacao = reader.GetInt32(7);
                int cod_local = reader.GetInt32(8);



                login = log.getLogin(user);

                local = new LI4.Business.Localidade(localData.getLocalidade(cod_local));
                cand = new LI4.Business.Candidato(nome, rua, cod_postal, mail, curriculum, situacao, telefone, local, login);

                array.Add(cand);
            }

            reader.Close();

            return array;
        }

       

        
    }
}
